{{#if hasVars}}
{{#if useDictionaryBasedTypedDict}}
Required{{classname}} = TypedDict("Required{{classname}}", {
    {{#each allVars}}
    {{#if required}}
    {{#if deprecated}}
    # WARNING: This property is deprecated
    {{/if}}
        {{#if description}}
    # {{{description}}}
        {{/if}}
    "{{baseName}}": {{> type_templates/type_property_data_type}},
    {{#unless @last}}

    {{/unless}}
    {{/if}}
    {{/each}}
    })
{{else}}
class Required{{classname}}(TypedDict):
    {{#each allVars}}
    {{#if required}}
    {{#if deprecated}}
    # WARNING: This property is deprecated
    {{/if}}
        {{#if description}}
    # {{{description}}}
        {{/if}}
    {{baseName}}: {{> type_templates/type_property_data_type}}
    {{#unless @last}}

    {{/unless}}
    {{/if}}
    {{/each}}
    {{#unless requiredVars}}
    pass
    {{/unless}}
{{/if}}

{{#if useDictionaryBasedTypedDict}}
Optional{{classname}} = TypedDict("Optional{{classname}}", {
    {{#each allVars}}
    {{#unless required}}
    {{#if deprecated}}
    # WARNING: This property is deprecated
    {{/if}}
        {{#if description}}
    # {{{description}}}
        {{/if}}
    "{{baseName}}": {{> type_templates/type_property_data_type}},
    {{#unless @last}}

    {{/unless}}
    {{/unless}}
    {{/each}}
    }, total=False)
{{else}}
class Optional{{classname}}(TypedDict, total=False):
    {{#each allVars}}
    {{#unless required}}
    {{#if deprecated}}
    # WARNING: This property is deprecated
    {{/if}}
        {{#if description}}
    # {{{description}}}
        {{/if}}
    {{baseName}}: {{> type_templates/type_property_data_type}}
    {{#unless @last}}

    {{/unless}}
    {{/unless}}
    {{/each}}
    {{#unless optionalVars}}
    pass
    {{/unless}}
{{/if}}

class {{classname}}(Required{{classname}}, Optional{{classname}}):
    pass
{{/if}}
